<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta content="IE=edge" http-equiv="X-UA-Compatible"/>
    <title>高等代数定义定理总结Index</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
            overflow: visible;
            position: relative;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            overflow: visible;
            display: block;
            margin:5px auto;
            margin-bottom: 5px;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">高等代数定义定理总结Index</div>
        </div>
        <div id="author-info">
          <div id="author-name" class="text">RUWU</div>
          <div id="share-time" class="text">2024-03-04</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg xmlns:xlink="http://www.w3.org/1999/xlink" ed:vSpacing="30" ed:hSpacing="30" xmlns="http://www.w3.org/2000/svg" preserveAspectRadio="xMinYMin meet" ed:name="画布 1" viewBox="0 0 1596 1181" xmlns:ev="http://www.w3.org/2001/xml-events" height="1181" id="page0" width="1596" xmlns:ed="https://www.edrawsoft.com/xml/2017/SVGExtensions/">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st21 {fill:#141414;font-family:华文楷体;font-size:13pt}
.st19 {fill:#454545;font-family:Times New Roman;font-size:23pt;font-weight:bold}
.st22 {fill:#454545;font-family:华文楷体;font-size:13pt}
.st23 {fill:#454545;font-family:华文楷体;font-size:15pt;font-weight:bold}
.st20 {fill:#454545;font-family:华文楷体;font-size:15pt}
]]></style>
    <defs/>
    <rect fill="#fbfcfb" height="1181" y="0" width="1596" x="0"/>
    <path transform="matrix(1,0,0,1,800.7,409.92)" d="M-26.4,34.4C-26.7,36.1,-25.8,37.5,-24.5,37.8C-23.1,38,-21.8,37.1,-21.5,35.3C-21.1,33,-20.6,30.7,-20.2,28.4C-19.8,26.1,-19.4,23.8,-19,21.5C-18.6,19.2,-18.2,16.9,-17.8,14.6C-17.4,12.3,-17,10,-16.6,7.7C-16.2,5.4,-15.8,3.1,-15.4,0.8C-15,-1.5,-14.7,-3.8,-14.3,-6.1C-13.9,-8.4,-13.4,-10.7,-13,-13C-12.6,-15.3,-12.2,-17.6,-11.8,-19.9C-11.4,-22.2,-11,-24.5,-10.6,-26.8C-10.2,-29.1,-9.8,-31.3,-9.3,-33.6C-8.9,-35.9,-8.5,-38.2,-8,-40.5C-7.6,-42.8,-7.2,-45.1,-6.7,-47.4C-6.3,-49.7,-5.8,-51.9,-5.3,-54.2C-4.9,-56.5,-4.4,-58.8,-3.9,-61.1C-3.5,-63.3,-3,-65.6,-2.5,-67.9C-2,-70.2,-1.5,-72.4,-0.9,-74.7C-0.4,-77,0.1,-79.2,0.6,-81.5C1.2,-83.8,1.7,-86,2.3,-88.3C2.9,-90.5,3.5,-92.8,4.1,-95C4.7,-97.3,5.3,-99.5,5.9,-101.8C6.5,-104,7.2,-106.2,7.9,-108.5C8.5,-110.7,9.2,-112.9,9.9,-115.1C10.6,-117.3,11.4,-119.6,12.1,-121.7C12.9,-123.9,13.6,-126.1,14.4,-128.3C15.2,-130.5,16.1,-132.7,16.9,-134.8C17.8,-137,18.7,-139.1,19.6,-141.3C20.5,-143.4,21.5,-145.5,22.4,-147.6C23.4,-149.7,24.4,-151.8,25.5,-153.8C26.6,-155.9,27.7,-158,28.8,-160C30,-162,31.1,-164,32.4,-165.9C33.6,-167.9,34.9,-169.8,36.2,-171.7C37.5,-173.6,38.9,-175.5,40.4,-177.3C41.8,-179.1,43.3,-180.9,44.8,-182.6C46.4,-184.3,48,-186,49.6,-187.6C51.3,-189.2,53,-190.7,54.8,-192.2C56.6,-193.6,58.5,-195,60.4,-196.3C62.3,-197.6,64.2,-198.9,66.2,-200C68.3,-201.1,70.3,-202.2,72.4,-203.1C74.5,-204.1,76.7,-204.9,78.9,-205.7C81.1,-206.4,83.3,-207.1,85.5,-207.6C87.8,-208.2,90,-208.6,92.3,-209C94.7,-209.3,97,-209.6,99.3,-209.8C101.5,-209.9,103.7,-210,105.8,-210C106.2,-210,106.4,-210.3,106.4,-210.5C106.4,-210.8,106.2,-211,105.8,-211C103.6,-211,101.5,-211,99.2,-210.9C96.9,-210.7,94.5,-210.5,92.2,-210.1C89.8,-209.8,87.5,-209.4,85.2,-208.9C83,-208.3,80.7,-207.7,78.4,-207C76.2,-206.2,74,-205.4,71.8,-204.5C69.7,-203.5,67.6,-202.5,65.5,-201.4C63.4,-200.2,61.4,-199,59.4,-197.7C57.5,-196.4,55.6,-195,53.7,-193.5C51.9,-192,50.1,-190.5,48.4,-188.9C46.7,-187.3,45,-185.6,43.4,-183.9C41.8,-182.2,40.3,-180.4,38.8,-178.6C37.3,-176.7,35.9,-174.9,34.5,-172.9C33.1,-171,31.8,-169.1,30.5,-167.1C29.2,-165.1,28,-163.1,26.8,-161.1C25.6,-159.1,24.5,-157,23.4,-155C22.3,-152.9,21.2,-150.8,20.2,-148.7C19.2,-146.6,18.2,-144.4,17.2,-142.3C16.3,-140.1,15.3,-138,14.5,-135.8C13.6,-133.7,12.7,-131.5,11.9,-129.3C11,-127.1,10.2,-124.9,9.4,-122.7C8.6,-120.5,7.9,-118.3,7.1,-116C6.4,-113.8,5.7,-111.6,5,-109.4C4.2,-107.1,3.6,-104.9,2.9,-102.6C2.2,-100.4,1.6,-98.2,1,-95.9C0.3,-93.6,-0.3,-91.4,-0.9,-89.1C-1.5,-86.9,-2.1,-84.6,-2.7,-82.3C-3.2,-80.1,-3.8,-77.8,-4.4,-75.5C-4.9,-73.2,-5.5,-71,-6,-68.7C-6.5,-66.4,-7,-64.1,-7.5,-61.9C-8.1,-59.6,-8.6,-57.3,-9.1,-55C-9.5,-52.7,-10,-50.4,-10.5,-48.1C-11,-45.9,-11.5,-43.6,-11.9,-41.3C-12.4,-39,-12.9,-36.7,-13.3,-34.4C-13.8,-32.1,-14.2,-29.8,-14.7,-27.5C-15.1,-25.2,-15.6,-22.9,-16,-20.7C-16.5,-18.4,-16.9,-16.1,-17.3,-13.8C-17.8,-11.5,-18.2,-9.2,-18.6,-6.9C-19.1,-4.6,-19.5,-2.3,-19.9,-0C-20.3,2.3,-20.8,4.6,-21.2,6.9C-21.6,9.2,-22.1,11.5,-22.5,13.8C-22.9,16,-23.3,18.3,-23.8,20.6C-24.2,22.9,-24.6,25.2,-25.1,27.5C-25.5,29.8,-25.9,32.1,-26.4,34.4z" stroke-linecap="round" fill="#ff7575" stroke-linejoin="round" id="123" ed:parentid="101" stroke="#ff7575" ed:tosuperid="122"/>
    <path transform="matrix(1,0,0,1,800.7,693.43)" d="M44.4,48C43,46.8,41.3,47,40.5,48.1C39.6,49.1,39.8,50.8,41.2,51.9C43.2,53.3,45.1,54.7,47,56C49,57.4,51,58.6,53.1,59.9C55.1,61.1,57.2,62.2,59.3,63.3C61.4,64.4,63.6,65.3,65.8,66.3C68,67.2,70.2,68,72.5,68.8C74.7,69.5,77,70.2,79.3,70.7C81.6,71.3,83.9,71.8,86.2,72.2C88.5,72.6,90.8,72.9,93.2,73.1C95.7,73.3,98.2,73.4,100.3,73.5C102.4,73.6,104.1,73.5,105.8,73.5C106.2,73.5,106.4,73.3,106.4,73C106.4,72.7,106.2,72.5,105.8,72.5C104.1,72.4,102.4,72.4,100.4,72.2C98.3,72,95.8,71.7,93.5,71.4C91.1,71,88.9,70.6,86.7,70.1C84.4,69.6,82.2,69,80,68.3C77.8,67.6,75.6,66.8,73.5,66C71.3,65.1,69.2,64.2,67.2,63.2C65.1,62.2,63.1,61.1,61.1,60C59.1,58.8,57.2,57.6,55.3,56.3C53.4,55,51.5,53.7,49.7,52.3C47.9,50.9,46.1,49.5,44.4,48z" stroke-linecap="round" fill="#ffcd55" stroke-linejoin="round" id="140" ed:parentid="101" stroke="#ffcd55" ed:tosuperid="139"/>
    <path transform="matrix(1,0,0,1,800.7,564.97)" d="M41.4,-37.9C39.9,-37,39.5,-35.4,40.3,-34.2C41,-33.1,42.7,-32.7,44.2,-33.7C46.1,-35,48,-36.3,49.9,-37.5C51.9,-38.8,53.8,-39.9,55.8,-41.1C57.8,-42.2,59.9,-43.2,61.9,-44.2C64,-45.2,66.1,-46.2,68.2,-47.1C70.4,-47.9,72.5,-48.8,74.7,-49.5C76.9,-50.2,79.1,-50.9,81.3,-51.5C83.6,-52.1,85.8,-52.6,88.1,-53C90.3,-53.5,92.5,-53.8,94.9,-54.1C97.3,-54.4,100,-54.7,101.8,-54.8C103.7,-54.9,104.7,-55,105.8,-55C106.2,-55,106.4,-55.2,106.4,-55.5C106.4,-55.8,106.2,-56,105.8,-56C104.7,-56,103.7,-56.1,101.8,-56C99.9,-56,97.2,-55.9,94.8,-55.8C92.3,-55.6,90,-55.4,87.7,-55.1C85.4,-54.8,83.1,-54.4,80.8,-53.9C78.4,-53.4,76.1,-52.9,73.9,-52.3C71.6,-51.6,69.3,-51,67.1,-50.2C64.8,-49.4,62.6,-48.6,60.4,-47.7C58.2,-46.8,56.1,-45.8,53.9,-44.7C51.8,-43.7,49.7,-42.6,47.6,-41.5C45.5,-40.3,43.5,-39.1,41.4,-37.9z" stroke-linecap="round" fill="#5fb7f1" stroke-linejoin="round" id="148" ed:parentid="101" stroke="#5fb7f1" ed:tosuperid="147"/>
    <path transform="matrix(1,0,0,1,1101.05,128.49)" d="M-17.5,70.9C7,70.9,-17.5,-70.9,17.5,-70.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="152" ed:parentid="122" stroke="#ff7575" ed:tosuperid="151" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,456.31)" d="M-17.5,53.2C6.3,53.2,-15.8,-53.2,17.5,-53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="166" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="165" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,474.04)" d="M-17.5,35.4C4,35.4,-10.5,-35.4,17.5,-35.4" stroke-linecap="round" fill="none" stroke-linejoin="round" id="168" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="167" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,491.76)" d="M-17.5,17.7C0.6,17.7,-2.5,-17.7,17.5,-17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="170" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="169" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,722.1)" d="M-17.5,44.3C5.3,44.3,-13.5,-44.3,17.5,-44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="178" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="177" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,739.83)" d="M-17.5,26.6C2.4,26.6,-6.8,-26.6,17.5,-26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="180" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="179" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,775.28)" d="M-17.5,-8.9C-1.4,-8.9,2.2,8.9,17.5,8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="182" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="181" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,800.7,773.42)" d="M-3,22C-3.6,20.3,-5,19.5,-6.3,19.9C-7.6,20.3,-8.4,21.8,-7.8,23.5C-7.1,25.7,-6.3,27.9,-5.6,30.1C-4.9,32.4,-4.1,34.6,-3.4,36.8C-2.6,39,-1.8,41.2,-1.1,43.4C-0.3,45.6,0.5,47.8,1.3,50C2.1,52.2,2.9,54.4,3.8,56.6C4.6,58.8,5.4,61,6.3,63.2C7.2,65.4,8.1,67.5,9,69.7C9.9,71.9,10.8,74,11.7,76.2C12.7,78.3,13.7,80.4,14.7,82.6C15.7,84.7,16.7,86.8,17.8,88.9C18.8,91,19.9,93.1,21,95.2C22.1,97.2,23.3,99.3,24.5,101.3C25.7,103.3,26.9,105.3,28.2,107.3C29.5,109.3,30.8,111.3,32.2,113.2C33.5,115.1,34.9,117,36.4,118.8C37.9,120.7,39.4,122.5,41,124.2C42.5,126,44.2,127.7,45.9,129.4C47.5,131,49.3,132.6,51.1,134.1C52.9,135.7,54.8,137.1,56.7,138.5C58.6,139.9,60.6,141.2,62.6,142.4C64.6,143.6,66.7,144.7,68.9,145.7C71,146.7,73.2,147.6,75.4,148.5C77.6,149.3,79.8,150,82.1,150.6C84.4,151.2,86.7,151.7,89,152.1C91.3,152.5,93.5,152.9,96,153.1C98.5,153.3,101.3,153.4,103,153.5C104.7,153.5,105.3,153.5,105.8,153.5C106.2,153.5,106.4,153.2,106.4,153C106.4,152.7,106.2,152.5,105.8,152.5C105.3,152.5,104.7,152.5,103.1,152.4C101.4,152.3,98.6,152.1,96.1,151.9C93.6,151.6,91.5,151.2,89.3,150.8C87,150.3,84.8,149.8,82.5,149.1C80.3,148.5,78.1,147.8,76,146.9C73.8,146.1,71.7,145.1,69.7,144.1C67.6,143,65.6,141.9,63.6,140.7C61.7,139.5,59.8,138.2,57.9,136.8C56.1,135.4,54.3,133.9,52.6,132.4C50.8,130.9,49.2,129.3,47.6,127.7C46,126,44.4,124.3,42.9,122.5C41.4,120.8,40,119,38.6,117.2C37.2,115.3,35.8,113.4,34.5,111.5C33.2,109.6,32,107.7,30.8,105.7C29.5,103.7,28.4,101.7,27.2,99.7C26.1,97.7,25,95.7,24,93.6C22.9,91.5,21.9,89.5,20.9,87.4C19.9,85.3,18.9,83.2,18,81.1C17,78.9,16.1,76.8,15.2,74.7C14.3,72.5,13.5,70.4,12.6,68.2C11.8,66.1,10.9,63.9,10.1,61.7C9.3,59.5,8.5,57.4,7.8,55.2C7,53,6.2,50.8,5.5,48.6C4.7,46.4,4,44.2,3.3,42C2.5,39.8,1.8,37.5,1.1,35.3C0.4,33.1,-0.3,30.9,-1,28.7C-1.7,26.4,-2.4,24.2,-3,22z" stroke-linecap="round" fill="#f1a3dc" stroke-linejoin="round" id="158" ed:parentid="101" stroke="#f1a3dc" ed:tosuperid="157"/>
    <path transform="matrix(1,0,0,1,1101.05,146.21)" d="M-17.5,53.2C6.3,53.2,-15.8,-53.2,17.5,-53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="160" ed:parentid="122" stroke="#ff7575" ed:tosuperid="159" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,163.94)" d="M-17.5,35.4C4,35.4,-10.5,-35.5,17.5,-35.5" stroke-linecap="round" fill="none" stroke-linejoin="round" id="162" ed:parentid="122" stroke="#ff7575" ed:tosuperid="161" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,181.66)" d="M-17.5,17.7C0.6,17.7,-2.5,-17.7,17.5,-17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="164" ed:parentid="122" stroke="#ff7575" ed:tosuperid="163" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,199.39)" d="M-17.5,-0C-3.5,-0,7,0,17.5,0" stroke-linecap="round" fill="none" stroke-linejoin="round" id="174" ed:parentid="122" stroke="#ff7575" ed:tosuperid="173" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,217.11)" d="M-17.5,-17.7C0.6,-17.7,-2.5,17.7,17.5,17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="228" ed:parentid="122" stroke="#ff7575" ed:tosuperid="227" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,509.49)" d="M-17.5,-0C-3.5,-0,7,0,17.5,0" stroke-linecap="round" fill="none" stroke-linejoin="round" id="232" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="231" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,527.21)" d="M-17.5,-17.7C0.6,-17.7,-2.5,17.7,17.5,17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="234" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="233" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,757.55)" d="M-17.5,8.9C-1.4,8.9,2.2,-8.9,17.5,-8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="238" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="237" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,234.84)" d="M-17.5,-35.5C4,-35.5,-10.5,35.5,17.5,35.5" stroke-linecap="round" fill="none" stroke-linejoin="round" id="240" ed:parentid="122" stroke="#ff7575" ed:tosuperid="239" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,252.56)" d="M-17.5,-53.2C6.3,-53.2,-15.8,53.2,17.5,53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="242" ed:parentid="122" stroke="#ff7575" ed:tosuperid="241" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,270.29)" d="M-17.5,-70.9C7,-70.9,-17.5,70.9,17.5,70.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="244" ed:parentid="122" stroke="#ff7575" ed:tosuperid="243" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,544.94)" d="M-17.5,-35.5C4,-35.5,-10.5,35.5,17.5,35.5" stroke-linecap="round" fill="none" stroke-linejoin="round" id="252" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="251" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,562.66)" d="M-17.5,-53.2C6.3,-53.2,-15.8,53.2,17.5,53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="254" ed:parentid="147" stroke="#5fb7f1" ed:tosuperid="253" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,793)" d="M-17.5,-26.6C2.4,-26.6,-6.8,26.6,17.5,26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="256" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="255" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1141.05,810.73)" d="M-17.5,-44.3C5.3,-44.3,-13.5,44.3,17.5,44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="258" ed:parentid="139" stroke="#ffcd55" ed:tosuperid="257" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1060.05,926.39)" d="M-17.5,0C-3.5,0,7,0,17.5,0" stroke-linecap="round" fill="none" stroke-linejoin="round" id="264" ed:parentid="157" stroke="#f1a3dc" ed:tosuperid="263" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,589.1,560.65)" d="M-44.2,-37.2C-42.8,-36.1,-41.1,-36.4,-40.3,-37.5C-39.5,-38.6,-39.9,-40.3,-41.4,-41.3C-43.4,-42.5,-45.4,-43.8,-47.4,-45C-49.5,-46.2,-51.6,-47.3,-53.7,-48.4C-55.8,-49.5,-58,-50.5,-60.1,-51.5C-62.3,-52.4,-64.5,-53.3,-66.7,-54.1C-69,-54.9,-71.2,-55.7,-73.5,-56.3C-75.8,-57,-78,-57.6,-80.4,-58.1C-82.7,-58.5,-85,-59,-87.3,-59.3C-89.6,-59.6,-91.9,-59.9,-94.4,-60.1C-96.8,-60.2,-99.5,-60.3,-101.4,-60.3C-103.3,-60.4,-104.6,-60.3,-105.8,-60.3C-106.2,-60.3,-106.4,-60.1,-106.4,-59.8C-106.4,-59.5,-106.2,-59.3,-105.8,-59.3C-104.6,-59.3,-103.4,-59.2,-101.5,-59.1C-99.5,-58.9,-96.9,-58.7,-94.5,-58.4C-92.1,-58.1,-89.9,-57.7,-87.7,-57.2C-85.5,-56.8,-83.2,-56.2,-81,-55.6C-78.7,-55,-76.5,-54.3,-74.4,-53.5C-72.2,-52.8,-70.1,-51.9,-68,-51C-65.9,-50.1,-63.8,-49.1,-61.7,-48.1C-59.7,-47,-57.7,-45.9,-55.7,-44.8C-53.7,-43.6,-51.8,-42.4,-49.9,-41.1C-48,-39.8,-46.1,-38.5,-44.2,-37.2z" stroke-linecap="round" fill="#a98ae7" stroke-linejoin="round" id="266" ed:parentid="101" stroke="#a98ae7" ed:tosuperid="265"/>
    <path transform="matrix(1,0,0,1,589.1,396.74)" d="M24,48.4C24.3,50.2,25.7,51.2,27,51C28.4,50.7,29.3,49.4,29,47.6C28.6,45.3,28.2,43,27.8,40.7C27.4,38.4,27,36.1,26.6,33.8C26.2,31.5,25.8,29.2,25.4,26.9C25,24.6,24.6,22.3,24.2,20C23.8,17.7,23.5,15.4,23.1,13.1C22.7,10.8,22.3,8.5,21.9,6.2C21.5,3.9,21.2,1.6,20.8,-0.7C20.4,-3,20,-5.3,19.6,-7.6C19.2,-9.9,18.8,-12.2,18.4,-14.5C18,-16.8,17.7,-19.1,17.3,-21.4C16.9,-23.7,16.5,-26,16.1,-28.3C15.7,-30.6,15.2,-32.9,14.8,-35.2C14.4,-37.5,14,-39.8,13.6,-42.1C13.2,-44.4,12.7,-46.7,12.3,-49C11.9,-51.3,11.4,-53.6,11,-55.9C10.5,-58.2,10.1,-60.5,9.6,-62.8C9.2,-65.1,8.7,-67.3,8.2,-69.6C7.7,-71.9,7.2,-74.2,6.7,-76.5C6.2,-78.8,5.7,-81.1,5.2,-83.3C4.7,-85.6,4.2,-87.9,3.6,-90.2C3.1,-92.5,2.5,-94.7,2,-97C1.4,-99.3,0.8,-101.5,0.2,-103.8C-0.4,-106.1,-1,-108.3,-1.6,-110.6C-2.2,-112.8,-2.9,-115.1,-3.6,-117.3C-4.2,-119.6,-4.9,-121.8,-5.6,-124C-6.3,-126.3,-7,-128.5,-7.8,-130.7C-8.5,-132.9,-9.3,-135.2,-10.1,-137.4C-10.9,-139.6,-11.7,-141.8,-12.5,-144C-13.4,-146.1,-14.3,-148.3,-15.2,-150.5C-16.1,-152.6,-17,-154.8,-18,-156.9C-18.9,-159.1,-19.9,-161.2,-21,-163.3C-22,-165.4,-23.1,-167.5,-24.2,-169.6C-25.3,-171.6,-26.5,-173.7,-27.7,-175.7C-28.9,-177.7,-30.1,-179.7,-31.4,-181.7C-32.7,-183.6,-34.1,-185.5,-35.5,-187.4C-36.9,-189.3,-38.3,-191.2,-39.8,-193C-41.4,-194.8,-42.9,-196.5,-44.6,-198.2C-46.2,-199.9,-47.9,-201.6,-49.6,-203.2C-51.4,-204.7,-53.2,-206.3,-55,-207.7C-56.9,-209.1,-58.8,-210.5,-60.8,-211.8C-62.8,-213,-64.9,-214.2,-66.9,-215.3C-69,-216.4,-71.2,-217.4,-73.4,-218.3C-75.5,-219.1,-77.8,-219.9,-80,-220.6C-82.3,-221.3,-84.6,-221.9,-86.8,-222.4C-89.1,-222.9,-91.4,-223.2,-93.8,-223.5C-96.2,-223.8,-98.8,-224,-100.8,-224.1C-102.8,-224.2,-104.3,-224.2,-105.8,-224.2C-106.2,-224.2,-106.4,-224,-106.4,-223.7C-106.4,-223.4,-106.2,-223.2,-105.8,-223.2C-104.3,-223.2,-102.9,-223.2,-100.9,-223.1C-98.9,-222.9,-96.3,-222.7,-93.9,-222.4C-91.6,-222.1,-89.3,-221.7,-87.1,-221.2C-84.9,-220.7,-82.6,-220.1,-80.4,-219.4C-78.2,-218.7,-76,-217.9,-73.9,-217C-71.8,-216.1,-69.7,-215.1,-67.6,-214C-65.6,-212.9,-63.6,-211.7,-61.7,-210.4C-59.8,-209.2,-57.9,-207.8,-56.1,-206.4C-54.2,-204.9,-52.5,-203.4,-50.8,-201.9C-49.1,-200.3,-47.5,-198.7,-45.9,-197C-44.3,-195.3,-42.8,-193.5,-41.3,-191.8C-39.9,-190,-38.5,-188.1,-37.1,-186.2C-35.7,-184.4,-34.4,-182.5,-33.2,-180.5C-31.9,-178.6,-30.7,-176.6,-29.6,-174.6C-28.4,-172.6,-27.3,-170.5,-26.2,-168.5C-25.1,-166.4,-24.1,-164.4,-23.1,-162.3C-22.1,-160.2,-21.1,-158.1,-20.2,-155.9C-19.3,-153.8,-18.4,-151.7,-17.5,-149.5C-16.6,-147.4,-15.8,-145.2,-15,-143C-14.2,-140.9,-13.4,-138.7,-12.6,-136.5C-11.9,-134.3,-11.1,-132.1,-10.4,-129.9C-9.7,-127.6,-9,-125.4,-8.3,-123.2C-7.7,-121,-7,-118.7,-6.4,-116.5C-5.8,-114.3,-5.1,-112,-4.5,-109.8C-3.9,-107.5,-3.4,-105.3,-2.8,-103C-2.2,-100.8,-1.7,-98.5,-1.1,-96.2C-0.6,-94,-0.1,-91.7,0.4,-89.4C0.9,-87.2,1.4,-84.9,1.9,-82.6C2.4,-80.3,2.9,-78.1,3.4,-75.8C3.8,-73.5,4.3,-71.2,4.7,-68.9C5.2,-66.6,5.6,-64.4,6.1,-62.1C6.5,-59.8,6.9,-57.5,7.3,-55.2C7.7,-52.9,8.2,-50.6,8.6,-48.3C9,-46,9.4,-43.7,9.8,-41.4C10.1,-39.1,10.5,-36.8,10.9,-34.5C11.3,-32.2,11.7,-29.9,12.1,-27.6C12.4,-25.3,12.8,-23,13.2,-20.7C13.5,-18.4,13.9,-16.1,14.3,-13.8C14.6,-11.5,15,-9.2,15.3,-6.9C15.7,-4.6,16.1,-2.3,16.4,0C16.8,2.3,17.1,4.6,17.5,6.9C17.8,9.2,18.2,11.5,18.6,13.8C18.9,16.1,19.3,18.5,19.6,20.8C20,23.1,20.3,25.4,20.7,27.7C21.1,30,21.4,32.3,21.8,34.6C22.2,36.9,22.5,39.2,22.9,41.5C23.3,43.8,23.7,46.1,24,48.4z" stroke-linecap="round" fill="#58d5d5" stroke-linejoin="round" id="268" ed:parentid="101" stroke="#58d5d5" ed:tosuperid="267"/>
    <path transform="matrix(1,0,0,1,800.7,830.98)" d="M-21.5,-35.3C-21.8,-37.1,-23.1,-38,-24.5,-37.8C-25.8,-37.5,-26.7,-36.1,-26.4,-34.4C-25.9,-32.1,-25.5,-29.8,-25.1,-27.5C-24.6,-25.2,-24.2,-22.9,-23.8,-20.6C-23.3,-18.3,-22.9,-16,-22.5,-13.8C-22.1,-11.5,-21.6,-9.2,-21.2,-6.9C-20.8,-4.6,-20.3,-2.3,-19.9,0C-19.5,2.3,-19.1,4.6,-18.6,6.9C-18.2,9.2,-17.8,11.5,-17.3,13.8C-16.9,16.1,-16.5,18.4,-16,20.7C-15.6,22.9,-15.1,25.2,-14.7,27.5C-14.2,29.8,-13.8,32.1,-13.3,34.4C-12.9,36.7,-12.4,39,-11.9,41.3C-11.5,43.6,-11,45.9,-10.5,48.1C-10,50.4,-9.5,52.7,-9.1,55C-8.6,57.3,-8.1,59.6,-7.5,61.9C-7,64.1,-6.5,66.4,-6,68.7C-5.5,71,-4.9,73.2,-4.4,75.5C-3.8,77.8,-3.2,80.1,-2.7,82.3C-2.1,84.6,-1.5,86.9,-0.9,89.1C-0.3,91.4,0.3,93.6,1,95.9C1.6,98.2,2.2,100.4,2.9,102.6C3.6,104.9,4.2,107.1,5,109.4C5.7,111.6,6.4,113.8,7.1,116C7.9,118.3,8.6,120.5,9.4,122.7C10.2,124.9,11,127.1,11.9,129.3C12.7,131.5,13.6,133.7,14.5,135.8C15.3,138,16.3,140.1,17.2,142.3C18.2,144.4,19.2,146.6,20.2,148.7C21.2,150.8,22.3,152.9,23.4,155C24.5,157,25.6,159.1,26.8,161.1C28,163.1,29.2,165.1,30.5,167.1C31.8,169.1,33.1,171,34.5,172.9C35.9,174.9,37.3,176.7,38.8,178.6C40.3,180.4,41.8,182.2,43.4,183.9C45,185.6,46.7,187.3,48.4,188.9C50.1,190.5,51.9,192,53.7,193.5C55.6,195,57.5,196.4,59.4,197.7C61.4,199,63.4,200.2,65.5,201.4C67.6,202.5,69.7,203.5,71.8,204.5C74,205.4,76.2,206.2,78.4,207C80.7,207.7,83,208.3,85.2,208.9C87.5,209.4,89.8,209.8,92.2,210.1C94.5,210.5,96.9,210.7,99.2,210.9C101.5,211,103.6,211,105.8,211C106.2,211,106.4,210.8,106.4,210.5C106.4,210.3,106.2,210,105.8,210C103.7,210,101.5,209.9,99.3,209.8C97,209.6,94.7,209.3,92.3,209C90,208.6,87.8,208.2,85.5,207.6C83.3,207.1,81.1,206.4,78.9,205.7C76.7,204.9,74.5,204.1,72.4,203.1C70.3,202.2,68.3,201.1,66.2,200C64.2,198.9,62.3,197.6,60.4,196.3C58.5,195,56.6,193.6,54.8,192.2C53,190.7,51.3,189.2,49.6,187.6C48,186,46.4,184.3,44.8,182.6C43.3,180.9,41.8,179.1,40.4,177.3C38.9,175.5,37.5,173.6,36.2,171.7C34.9,169.8,33.6,167.9,32.4,165.9C31.1,164,30,162,28.8,160C27.7,158,26.6,155.9,25.5,153.8C24.4,151.8,23.4,149.7,22.4,147.6C21.5,145.5,20.5,143.4,19.6,141.3C18.7,139.1,17.8,137,16.9,134.8C16.1,132.7,15.2,130.5,14.4,128.3C13.6,126.1,12.9,123.9,12.1,121.7C11.4,119.6,10.6,117.3,9.9,115.1C9.2,112.9,8.5,110.7,7.9,108.5C7.2,106.2,6.5,104,5.9,101.8C5.3,99.5,4.7,97.3,4.1,95C3.5,92.8,2.9,90.5,2.3,88.3C1.7,86,1.2,83.8,0.6,81.5C0.1,79.2,-0.4,77,-0.9,74.7C-1.5,72.4,-2,70.2,-2.5,67.9C-3,65.6,-3.5,63.3,-3.9,61.1C-4.4,58.8,-4.9,56.5,-5.3,54.2C-5.8,51.9,-6.3,49.7,-6.7,47.4C-7.2,45.1,-7.6,42.8,-8,40.5C-8.5,38.2,-8.9,35.9,-9.3,33.6C-9.8,31.3,-10.2,29.1,-10.6,26.8C-11,24.5,-11.4,22.2,-11.8,19.9C-12.2,17.6,-12.6,15.3,-13,13C-13.4,10.7,-13.9,8.4,-14.3,6.1C-14.7,3.8,-15,1.5,-15.4,-0.8C-15.8,-3.1,-16.2,-5.4,-16.6,-7.7C-17,-10,-17.4,-12.3,-17.8,-14.6C-18.2,-16.9,-18.6,-19.2,-19,-21.5C-19.4,-23.8,-19.8,-26.1,-20.2,-28.4C-20.6,-30.7,-21.1,-33,-21.5,-35.3z" stroke-linecap="round" fill="#6cc9e5" stroke-linejoin="round" id="270" ed:parentid="101" stroke="#6cc9e5" ed:tosuperid="269"/>
    <path transform="matrix(1,0,0,1,1101.05,1014.92)" d="M-17.5,26.6C2.4,26.6,-6.8,-26.6,17.5,-26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="272" ed:parentid="269" stroke="#6cc9e5" ed:tosuperid="271" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,1032.65)" d="M-17.5,8.9C-1.4,8.9,2.2,-8.9,17.5,-8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="278" ed:parentid="269" stroke="#6cc9e5" ed:tosuperid="277" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,1050.38)" d="M-17.5,-8.9C-1.4,-8.9,2.2,8.9,17.5,8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="280" ed:parentid="269" stroke="#6cc9e5" ed:tosuperid="279" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,1101.05,1068.1)" d="M-17.5,-26.6C2.4,-26.6,-6.8,26.6,17.5,26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="282" ed:parentid="269" stroke="#6cc9e5" ed:tosuperid="281" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,110.99)" d="M17.5,62C-6.8,62,17.1,-62,-17.5,-62" stroke-linecap="round" fill="none" stroke-linejoin="round" id="294" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="293" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,164.16)" d="M17.5,8.9C1.4,8.9,-2.2,-8.9,-17.5,-8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="296" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="295" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,235.06)" d="M17.5,-62C-6.8,-62,17.1,62,-17.5,62" stroke-linecap="round" fill="none" stroke-linejoin="round" id="298" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="297" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,128.71)" d="M17.5,44.3C-5.3,44.3,13.5,-44.3,-17.5,-44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="300" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="299" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,146.44)" d="M17.5,26.6C-2.4,26.6,6.8,-26.6,-17.5,-26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="302" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="301" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,181.89)" d="M17.5,-8.9C1.4,-8.9,-2.2,8.9,-17.5,8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="304" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="303" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,199.61)" d="M17.5,-26.6C-2.4,-26.6,6.8,26.6,-17.5,26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="306" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="305" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,217.34)" d="M17.5,-44.3C-5.3,-44.3,13.5,44.3,-17.5,44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="308" ed:parentid="267" stroke="#58d5d5" ed:tosuperid="307" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,589.1,715.7)" d="M-41.1,71.2C-39.7,70,-39.7,68.3,-40.6,67.3C-41.6,66.3,-43.2,66.3,-44.5,67.5C-46.2,69.1,-47.8,70.7,-49.5,72.3C-51.2,73.8,-53,75.3,-54.8,76.7C-56.6,78.1,-58.4,79.4,-60.3,80.7C-62.2,81.9,-64.2,83.1,-66.2,84.2C-68.2,85.3,-70.2,86.4,-72.3,87.3C-74.4,88.3,-76.5,89.1,-78.7,89.9C-80.9,90.6,-83.1,91.3,-85.3,91.9C-87.5,92.5,-89.8,93,-92.1,93.4C-94.3,93.8,-96.6,94.1,-98.9,94.3C-101.2,94.5,-103.5,94.6,-105.8,94.7C-106.2,94.8,-106.4,95,-106.4,95.2C-106.4,95.5,-106.2,95.7,-105.8,95.7C-103.5,95.8,-101.2,95.8,-98.8,95.7C-96.5,95.6,-94.1,95.4,-91.8,95.2C-89.5,94.9,-87.1,94.5,-84.8,94C-82.5,93.6,-80.2,93,-77.9,92.4C-75.6,91.7,-73.4,90.9,-71.2,90.1C-68.9,89.2,-66.8,88.3,-64.6,87.2C-62.5,86.2,-60.4,85.1,-58.3,83.9C-56.3,82.7,-54.2,81.4,-52.3,80C-50.3,78.7,-48.4,77.3,-46.5,75.8C-44.7,74.3,-42.9,72.7,-41.1,71.2z" stroke-linecap="round" fill="#fa8556" stroke-linejoin="round" id="310" ed:parentid="101" stroke="#fa8556" ed:tosuperid="309"/>
    <path transform="matrix(1,0,0,1,589.1,844.16)" d="M29,-47.6C29.3,-49.4,28.4,-50.7,27,-51C25.7,-51.2,24.3,-50.2,24,-48.4C23.7,-46.1,23.3,-43.8,22.9,-41.5C22.5,-39.2,22.2,-36.9,21.8,-34.6C21.4,-32.3,21.1,-30,20.7,-27.7C20.3,-25.4,20,-23.1,19.6,-20.8C19.3,-18.5,18.9,-16.1,18.6,-13.8C18.2,-11.5,17.8,-9.2,17.5,-6.9C17.1,-4.6,16.8,-2.3,16.4,-0C16.1,2.3,15.7,4.6,15.3,6.9C15,9.2,14.6,11.5,14.3,13.8C13.9,16.1,13.5,18.4,13.2,20.7C12.8,23,12.4,25.3,12.1,27.6C11.7,29.9,11.3,32.2,10.9,34.5C10.5,36.8,10.1,39.1,9.8,41.4C9.4,43.7,9,46,8.6,48.3C8.2,50.6,7.7,52.9,7.3,55.2C6.9,57.5,6.5,59.8,6.1,62.1C5.6,64.4,5.2,66.6,4.7,68.9C4.3,71.2,3.8,73.5,3.4,75.8C2.9,78.1,2.4,80.3,1.9,82.6C1.4,84.9,0.9,87.2,0.4,89.4C-0.1,91.7,-0.6,94,-1.1,96.2C-1.7,98.5,-2.2,100.8,-2.8,103C-3.4,105.3,-3.9,107.5,-4.5,109.8C-5.1,112,-5.8,114.3,-6.4,116.5C-7,118.7,-7.7,121,-8.3,123.2C-9,125.4,-9.7,127.6,-10.4,129.9C-11.1,132.1,-11.9,134.3,-12.6,136.5C-13.4,138.7,-14.2,140.9,-15,143C-15.8,145.2,-16.6,147.4,-17.5,149.5C-18.4,151.7,-19.3,153.8,-20.2,155.9C-21.1,158.1,-22.1,160.2,-23.1,162.3C-24.1,164.4,-25.1,166.4,-26.2,168.5C-27.3,170.5,-28.4,172.6,-29.6,174.6C-30.7,176.6,-31.9,178.6,-33.2,180.5C-34.4,182.5,-35.7,184.4,-37.1,186.2C-38.5,188.1,-39.9,190,-41.3,191.8C-42.8,193.5,-44.3,195.3,-45.9,197C-47.5,198.7,-49.1,200.3,-50.8,201.9C-52.5,203.4,-54.2,204.9,-56.1,206.4C-57.9,207.8,-59.8,209.2,-61.7,210.4C-63.6,211.7,-65.6,212.9,-67.6,214C-69.7,215.1,-71.8,216.1,-73.9,217C-76,217.9,-78.2,218.7,-80.4,219.4C-82.6,220.1,-84.9,220.7,-87.1,221.2C-89.3,221.7,-91.6,222.1,-93.9,222.4C-96.3,222.7,-98.9,222.9,-100.9,223.1C-102.9,223.2,-104.3,223.2,-105.8,223.2C-106.2,223.2,-106.4,223.4,-106.4,223.7C-106.4,224,-106.2,224.2,-105.8,224.2C-104.3,224.2,-102.8,224.2,-100.8,224.1C-98.8,224,-96.2,223.8,-93.8,223.5C-91.4,223.2,-89.1,222.9,-86.8,222.4C-84.6,221.9,-82.3,221.3,-80,220.6C-77.8,219.9,-75.5,219.1,-73.4,218.3C-71.2,217.4,-69,216.4,-66.9,215.3C-64.9,214.2,-62.8,213,-60.8,211.8C-58.8,210.5,-56.9,209.1,-55,207.7C-53.2,206.3,-51.4,204.7,-49.6,203.2C-47.9,201.6,-46.2,199.9,-44.6,198.2C-42.9,196.5,-41.4,194.8,-39.8,193C-38.3,191.2,-36.9,189.3,-35.5,187.4C-34.1,185.5,-32.7,183.6,-31.4,181.7C-30.1,179.7,-28.9,177.7,-27.7,175.7C-26.5,173.7,-25.3,171.6,-24.2,169.6C-23.1,167.5,-22,165.4,-21,163.3C-19.9,161.2,-18.9,159.1,-18,156.9C-17,154.8,-16.1,152.6,-15.2,150.5C-14.3,148.3,-13.4,146.1,-12.5,144C-11.7,141.8,-10.9,139.6,-10.1,137.4C-9.3,135.2,-8.5,132.9,-7.8,130.7C-7,128.5,-6.3,126.3,-5.6,124C-4.9,121.8,-4.2,119.6,-3.6,117.3C-2.9,115.1,-2.2,112.8,-1.6,110.6C-1,108.3,-0.4,106.1,0.2,103.8C0.8,101.5,1.4,99.3,2,97C2.5,94.7,3.1,92.5,3.6,90.2C4.2,87.9,4.7,85.6,5.2,83.3C5.7,81.1,6.2,78.8,6.7,76.5C7.2,74.2,7.7,71.9,8.2,69.6C8.7,67.3,9.2,65.1,9.6,62.8C10.1,60.5,10.5,58.2,11,55.9C11.4,53.6,11.9,51.3,12.3,49C12.7,46.7,13.2,44.4,13.6,42.1C14,39.8,14.4,37.5,14.8,35.2C15.2,32.9,15.7,30.6,16.1,28.3C16.5,26,16.9,23.7,17.3,21.4C17.7,19.1,18,16.8,18.4,14.5C18.8,12.2,19.2,9.9,19.6,7.6C20,5.3,20.4,3,20.8,0.7C21.2,-1.6,21.5,-3.9,21.9,-6.2C22.3,-8.5,22.7,-10.8,23.1,-13.1C23.5,-15.4,23.8,-17.7,24.2,-20C24.6,-22.3,25,-24.6,25.4,-26.9C25.8,-29.2,26.2,-31.5,26.6,-33.8C27,-36.1,27.4,-38.4,27.8,-40.7C28.2,-43,28.6,-45.3,29,-47.6z" stroke-linecap="round" fill="#80cf70" stroke-linejoin="round" id="312" ed:parentid="101" stroke="#80cf70" ed:tosuperid="311"/>
    <path transform="matrix(1,0,0,1,268.75,429.95)" d="M17.5,70.9C-7,70.9,17.5,-70.9,-17.5,-70.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="314" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="313" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,447.67)" d="M17.5,53.2C-6.3,53.2,15.8,-53.2,-17.5,-53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="318" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="317" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,465.4)" d="M17.5,35.4C-4,35.4,10.5,-35.4,-17.5,-35.4" stroke-linecap="round" fill="none" stroke-linejoin="round" id="320" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="319" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,483.13)" d="M17.5,17.7C-0.6,17.7,2.5,-17.7,-17.5,-17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="322" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="321" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,500.85)" d="M17.5,-0C3.5,-0,-7,0,-17.5,0" stroke-linecap="round" fill="none" stroke-linejoin="round" id="324" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="323" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,518.58)" d="M17.5,-17.7C-0.6,-17.7,2.5,17.7,-17.5,17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="326" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="325" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,536.3)" d="M17.5,-35.5C-4,-35.5,10.5,35.5,-17.5,35.5" stroke-linecap="round" fill="none" stroke-linejoin="round" id="328" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="327" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,554.03)" d="M17.5,-53.2C-6.3,-53.2,15.8,53.2,-17.5,53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="330" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="329" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,268.75,571.75)" d="M17.5,-70.9C-7,-70.9,17.5,70.9,-17.5,70.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="334" ed:parentid="265" stroke="#a98ae7" ed:tosuperid="333" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,757.77)" d="M17.5,53.2C-6.3,53.2,15.8,-53.2,-17.5,-53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="336" ed:parentid="309" stroke="#fa8556" ed:tosuperid="335" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,775.5)" d="M17.5,35.4C-4,35.4,10.5,-35.4,-17.5,-35.4" stroke-linecap="round" fill="none" stroke-linejoin="round" id="340" ed:parentid="309" stroke="#fa8556" ed:tosuperid="339" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,793.23)" d="M17.5,17.7C-0.6,17.7,2.5,-17.7,-17.5,-17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="342" ed:parentid="309" stroke="#fa8556" ed:tosuperid="341" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,810.95)" d="M17.5,-0C3.5,-0,-7,0,-17.5,0" stroke-linecap="round" fill="none" stroke-linejoin="round" id="344" ed:parentid="309" stroke="#fa8556" ed:tosuperid="343" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,828.67)" d="M17.5,-17.7C-0.6,-17.7,2.5,17.7,-17.5,17.7" stroke-linecap="round" fill="none" stroke-linejoin="round" id="346" ed:parentid="309" stroke="#fa8556" ed:tosuperid="345" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,846.4)" d="M17.5,-35.5C-4,-35.5,10.5,35.5,-17.5,35.5" stroke-linecap="round" fill="none" stroke-linejoin="round" id="348" ed:parentid="309" stroke="#fa8556" ed:tosuperid="347" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,293.55,864.13)" d="M17.5,-53.2C-6.3,-53.2,15.8,53.2,-17.5,53.2" stroke-linecap="round" fill="none" stroke-linejoin="round" id="350" ed:parentid="309" stroke="#fa8556" ed:tosuperid="349" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1023.56)" d="M17.5,44.3C-5.3,44.3,13.5,-44.3,-17.5,-44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="352" ed:parentid="311" stroke="#80cf70" ed:tosuperid="351" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1041.29)" d="M17.5,26.6C-2.4,26.6,6.8,-26.6,-17.5,-26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="354" ed:parentid="311" stroke="#80cf70" ed:tosuperid="353" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1059.01)" d="M17.5,8.9C1.4,8.9,-2.2,-8.9,-17.5,-8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="356" ed:parentid="311" stroke="#80cf70" ed:tosuperid="355" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1076.74)" d="M17.5,-8.9C1.4,-8.9,-2.2,8.9,-17.5,8.9" stroke-linecap="round" fill="none" stroke-linejoin="round" id="358" ed:parentid="311" stroke="#80cf70" ed:tosuperid="357" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1094.46)" d="M17.5,-26.6C-2.4,-26.6,6.8,26.6,-17.5,26.6" stroke-linecap="round" fill="none" stroke-linejoin="round" id="360" ed:parentid="311" stroke="#80cf70" ed:tosuperid="359" stroke-width="2"/>
    <path transform="matrix(1,0,0,1,228.75,1112.19)" d="M17.5,-44.3C-5.3,-44.3,13.5,44.3,-17.5,44.3" stroke-linecap="round" fill="none" stroke-linejoin="round" id="362" ed:parentid="311" stroke="#80cf70" ed:tosuperid="361" stroke-width="2"/>
    <g transform="matrix(1,0,0,1,546.3,444.75)" ed:height="351.4" ed:topictype="mainidea" ed:layout="map" id="101" ed:width="297.2">
        <path d="M4,0L293.2,0C295.9,0,297.2,1.3,297.2,4L297.2,347.4C297.2,350.1,295.9,351.4,293.2,351.4L4,351.4C1.3,351.4,0,350.1,0,347.4L0,4C0,1.3,1.3,0,4,0z" fill="#ffffff" stroke-linejoin="round" stroke="#ffffff" stroke-width="4"/>
        <image height="318.4" id="shape5" y="15" width="251.2" x="17" xlink:href=""/>
        <text class="st19"/>
    </g>
    <g transform="matrix(1,0,0,1,906.5,161.04)" ed:height="38.35" ed:layout="rightmap" id="122" ed:width="177" ed:parentid="101">
        <path d="M0,38.4L177,38.4" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第一章多项式</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/cjZSZYe7CFtQ&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(144,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <symbol id="imghyperlink">
        <image height="16" width="16" xlink:href=""/>
    </symbol>
    <g transform="matrix(1,0,0,1,906.5,728.06)" ed:height="38.35" ed:layout="rightmap" id="139" ed:width="217" ed:parentid="101">
        <path d="M0,38.4L217,38.4" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第三章线性方程组</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/cgNz2R1qbOQ8&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(184,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,906.5,471.14)" ed:height="38.35" ed:layout="rightmap" id="147" ed:width="177" ed:parentid="101">
        <path d="M0,38.4L177,38.4" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第二章行列式</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/cleoJrphAw0k&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(144,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,28.64)" ed:height="28.95" ed:layout="rightmap" id="151" ed:width="53.2" ed:parentid="122">
        <path d="M0,28.9L53.2,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st21">
            <tspan style="white-space:pre" y="21.4" x="8">数域</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,374.19)" ed:height="28.95" ed:layout="rightmap" id="165" ed:width="53.2" ed:parentid="147">
        <path d="M0,28.9L53.2,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">引言</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,409.64)" ed:height="28.95" ed:layout="rightmap" id="167" ed:width="53.2" ed:parentid="147">
        <path d="M0,28.9L53.2,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">排列</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,445.09)" ed:height="28.95" ed:layout="rightmap" id="169" ed:width="97.2" ed:parentid="147">
        <path d="M0,28.9L97.2,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">n阶行列式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,648.84)" ed:height="28.95" ed:layout="rightmap" id="177" ed:width="70.8" ed:parentid="139">
        <path d="M0,28.9L70.8,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">消元法</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,684.29)" ed:height="28.95" ed:layout="rightmap" id="179" ed:width="114.8" ed:parentid="139">
        <path d="M0,28.9L114.8,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">n维向量空间</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,755.19)" ed:height="28.95" ed:layout="rightmap" id="181" ed:width="88.40000000000001" ed:parentid="139">
        <path d="M0,28.9L88.4,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">矩阵的秩</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,906.5,888.04)" ed:height="38.35" ed:layout="rightmap" id="157" ed:width="136" ed:parentid="101">
        <path d="M0,38.4L136,38.4" fill="none" stroke-linejoin="round" stroke="#f1a3dc" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第四章矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,64.09)" ed:height="28.95" ed:layout="rightmap" id="159" ed:width="106" ed:parentid="122">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">一元多项式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,99.54)" ed:height="28.95" ed:layout="rightmap" id="161" ed:width="106" ed:parentid="122">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">整除的概念</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,134.99)" ed:height="28.95" ed:layout="rightmap" id="163" ed:width="106" ed:parentid="122">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">最大公因式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,170.44)" ed:height="28.95" ed:layout="rightmap" id="173" ed:width="123.6" ed:parentid="122">
        <path d="M0,28.9L123.6,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">因式分解定理</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,205.89)" ed:height="28.95" ed:layout="rightmap" id="227" ed:width="70.8" ed:parentid="122">
        <path d="M0,28.9L70.8,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">重因式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,480.54)" ed:height="28.95" ed:layout="rightmap" id="231" ed:width="150" ed:parentid="147">
        <path d="M0,28.9L150,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">n阶行列式的性质</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,515.99)" ed:height="28.95" ed:layout="rightmap" id="233" ed:width="123.6" ed:parentid="147">
        <path d="M0,28.9L123.6,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">行列式的计算</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,719.74)" ed:height="28.95" ed:layout="rightmap" id="237" ed:width="106" ed:parentid="139">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性相关性</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,241.34)" ed:height="28.95" ed:layout="rightmap" id="239" ed:width="106" ed:parentid="122">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">多项式函数</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,276.79)" ed:height="28.95" ed:layout="rightmap" id="241" ed:width="282" ed:parentid="122">
        <path d="M0,28.9L282,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">复系数与实系数多项式的因式分解</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,312.24)" ed:height="28.95" ed:layout="rightmap" id="243" ed:width="141.2" ed:parentid="122">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#ff7575" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">有理系数多项式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,551.44)" ed:height="28.95" ed:layout="rightmap" id="251" ed:width="186" ed:parentid="147">
        <path d="M0,28.9L186,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">行列式按一行(列)展开</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,586.89)" ed:height="28.95" ed:layout="rightmap" id="253" ed:width="166" ed:parentid="147">
        <path d="M0,28.9L166,28.9" fill="none" stroke-linejoin="round" stroke="#5fb7f1" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">克拉默(Cramer)法则</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,790.64)" ed:height="28.95" ed:layout="rightmap" id="255" ed:width="211.6" ed:parentid="139">
        <path d="M0,28.9L211.6,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性方程组有解判别定理</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1158.6,826.09)" ed:height="28.95" ed:layout="rightmap" id="257" ed:width="176.4" ed:parentid="139">
        <path d="M0,28.9L176.4,28.9" fill="none" stroke-linejoin="round" stroke="#ffcd55" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性方程组解的结构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1077.6,895.04)" ed:height="31.35" ed:layout="rightmap" id="263" ed:width="496.6" ed:parentid="157">
        <path d="M0,0L496.6,0L496.6,31.4L0,31.4L0,0z" fill="#ffc000"/>
        <path d="M0,31.4L496.6,31.4" fill="none" stroke-linejoin="round" stroke="#f1a3dc" stroke-width="2"/>
        <text class="st23">
            <tspan style="white-space:pre" y="23.8" x="8">这章未整理笔记，可看丘维声老师网课版本的笔记</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://duanjinyi.gitee.io/qiu-online-course-index-/&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(472,7)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,286.3,462.5)" ed:height="38.35" ed:layout="leftmap" id="265" ed:width="197" ed:parentid="101">
        <path d="M0,38.4L197,38.4" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第七章线性变换</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/csuC2Kl0l9wU&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(164,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,286.3,134.68)" ed:height="38.35" ed:layout="leftmap" id="267" ed:width="197" ed:parentid="101">
        <path d="M0,38.4L197,38.4" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第六章线性空间</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/ceDtwj1P6rl8&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(164,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,906.5,1003.16)" ed:height="38.35" ed:layout="rightmap" id="269" ed:width="177" ed:parentid="101">
        <path d="M0,38.4L177,38.4" fill="none" stroke-linejoin="round" stroke="#6cc9e5" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第五章二次型</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/ca1XFjZxNtlq&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(144,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,959.39)" ed:height="28.95" ed:layout="rightmap" id="271" ed:width="176.4" ed:parentid="269">
        <path d="M0,28.9L176.4,28.9" fill="none" stroke-linejoin="round" stroke="#6cc9e5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">二次型及其矩阵表示</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,994.84)" ed:height="28.95" ed:layout="rightmap" id="277" ed:width="70.8" ed:parentid="269">
        <path d="M0,28.9L70.8,28.9" fill="none" stroke-linejoin="round" stroke="#6cc9e5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">标准形</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,1030.29)" ed:height="28.95" ed:layout="rightmap" id="279" ed:width="70.8" ed:parentid="269">
        <path d="M0,28.9L70.8,28.9" fill="none" stroke-linejoin="round" stroke="#6cc9e5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">唯一性</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,1118.6,1065.74)" ed:height="28.95" ed:layout="rightmap" id="281" ed:width="106" ed:parentid="269">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#6cc9e5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">正定二次型</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,145.2,20)" ed:height="28.95" ed:layout="leftmap" id="293" ed:width="106" ed:parentid="267">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">集合·映射</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,92.4,126.35)" ed:height="28.95" ed:layout="leftmap" id="295" ed:width="158.8" ed:parentid="267">
        <path d="M0,28.9L158.8,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">基变换与坐标变换</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,110,268.15)" ed:height="28.95" ed:layout="leftmap" id="297" ed:width="141.2" ed:parentid="267">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性空间的同构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,22,55.45)" ed:height="28.95" ed:layout="leftmap" id="299" ed:width="229.2" ed:parentid="267">
        <path d="M0,28.9L229.2,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性空间的定义与简单性质</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,110,90.9)" ed:height="28.95" ed:layout="leftmap" id="301" ed:width="141.2" ed:parentid="267">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">维数·基与坐标</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,145.2,161.8)" ed:height="28.95" ed:layout="leftmap" id="303" ed:width="106" ed:parentid="267">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性子空间</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,110,197.25)" ed:height="28.95" ed:layout="leftmap" id="305" ed:width="141.2" ed:parentid="267">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">子空间的交与和</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,127.6,232.7)" ed:height="28.95" ed:layout="leftmap" id="307" ed:width="123.6" ed:parentid="267">
        <path d="M0,28.9L123.6,28.9" fill="none" stroke-linejoin="round" stroke="#58d5d5" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">子空间的直和</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,311.1,772.6)" ed:height="38.35" ed:layout="leftmap" id="309" ed:width="172.2" ed:parentid="101">
        <path d="M0,38.4L172.2,38.4" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第八章λ-矩阵</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/cub00kooxruR&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(139,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,246.3,1029.53)" ed:height="38.35" ed:layout="leftmap" id="311" ed:width="237" ed:parentid="101">
        <path d="M0,38.4L237,38.4" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st20">
            <tspan style="white-space:pre" y="27.4" x="17">第九章欧几里得空间</tspan>
        </text>
        <g ed:hyperlink="[&#xa;    {&#xa;        &quot;desc&quot;: &quot;&quot;,&#xa;        &quot;link&quot;: &quot;https://kdocs.cn/l/ciKAO81RFTEE&quot;&#xa;    }&#xa;]&#xa;">
            <use transform="translate(204,11)" xlink:href="#imghyperlink"/>
        </g>
    </g>
    <g transform="matrix(1,0,0,1,110,330.1)" ed:height="28.95" ed:layout="leftmap" id="313" ed:width="141.2" ed:parentid="265">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性变换的定义</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,110,365.55)" ed:height="28.95" ed:layout="leftmap" id="317" ed:width="141.2" ed:parentid="265">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性变换的运算</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,110,401)" ed:height="28.95" ed:layout="leftmap" id="319" ed:width="141.2" ed:parentid="265">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性变换的矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,92.4,436.45)" ed:height="28.95" ed:layout="leftmap" id="321" ed:width="158.8" ed:parentid="265">
        <path d="M0,28.9L158.8,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">特征值与特征向量</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,162.8,471.9)" ed:height="28.95" ed:layout="leftmap" id="323" ed:width="88.40000000000001" ed:parentid="265">
        <path d="M0,28.9L88.4,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">对角矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,74.8,507.35)" ed:height="28.95" ed:layout="leftmap" id="325" ed:width="176.4" ed:parentid="265">
        <path d="M0,28.9L176.4,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">线性变换的值域与核</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,145.2,542.8)" ed:height="28.95" ed:layout="leftmap" id="327" ed:width="106" ed:parentid="265">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">不变子空间</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,38,578.25)" ed:height="28.95" ed:layout="leftmap" id="329" ed:width="213.2" ed:parentid="265">
        <path d="M0,28.9L213.2,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">若尔当(Jordan)标准形介绍</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,145.2,613.7)" ed:height="28.95" ed:layout="leftmap" id="333" ed:width="106" ed:parentid="265">
        <path d="M0,28.9L106,28.9" fill="none" stroke-linejoin="round" stroke="#a98ae7" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">最小多项式</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,210,675.65)" ed:height="28.95" ed:layout="leftmap" id="335" ed:width="66" ed:parentid="309">
        <path d="M0,28.9L66,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">λ-矩阵</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,34,711.1)" ed:height="28.95" ed:layout="leftmap" id="339" ed:width="242" ed:parentid="309">
        <path d="M0,28.9L242,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">λ-矩阵在初等变换下的标准型</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,187.6,746.55)" ed:height="28.95" ed:layout="leftmap" id="341" ed:width="88.40000000000001" ed:parentid="309">
        <path d="M0,28.9L88.4,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">不变因子</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,134.8,782)" ed:height="28.95" ed:layout="leftmap" id="343" ed:width="141.2" ed:parentid="309">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">矩阵相似的条件</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,187.6,817.45)" ed:height="28.95" ed:layout="leftmap" id="345" ed:width="88.40000000000001" ed:parentid="309">
        <path d="M0,28.9L88.4,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">初等因子</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,64.4,852.9)" ed:height="28.95" ed:layout="leftmap" id="347" ed:width="211.6" ed:parentid="309">
        <path d="M0,28.9L211.6,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">若尔当标准形的理论推导</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,117.2,888.35)" ed:height="28.95" ed:layout="leftmap" id="349" ed:width="158.8" ed:parentid="309">
        <path d="M0,28.9L158.8,28.9" fill="none" stroke-linejoin="round" stroke="#fa8556" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">矩阵的有理标准形</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,70,950.3)" ed:height="28.95" ed:layout="leftmap" id="351" ed:width="141.2" ed:parentid="311">
        <path d="M0,28.9L141.2,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">定义与基本性质</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,104.4,985.75)" ed:height="28.95" ed:layout="leftmap" id="353" ed:width="106.8" ed:parentid="311">
        <path d="M0,28.9L106.8,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">标准正交基</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,158,1021.2)" ed:height="28.95" ed:layout="leftmap" id="355" ed:width="53.2" ed:parentid="311">
        <path d="M0,28.9L53.2,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">同构</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,122.8,1056.65)" ed:height="28.95" ed:layout="leftmap" id="357" ed:width="88.40000000000001" ed:parentid="311">
        <path d="M0,28.9L88.4,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">正交变换</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,140.4,1092.1)" ed:height="28.95" ed:layout="leftmap" id="359" ed:width="70.8" ed:parentid="311">
        <path d="M0,28.9L70.8,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">子空间</tspan>
        </text>
    </g>
    <g transform="matrix(1,0,0,1,34.8,1127.55)" ed:height="28.95" ed:layout="leftmap" id="361" ed:width="176.4" ed:parentid="311">
        <path d="M0,28.9L176.4,28.9" fill="none" stroke-linejoin="round" stroke="#80cf70" stroke-width="2"/>
        <text class="st22">
            <tspan style="white-space:pre" y="21.4" x="8">实对称矩阵的标准形</tspan>
        </text>
    </g>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YSA9IHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50Ow0KdmFyIHVhID0gKG11YS5pbmRleE9mKCdydjoxMScpICsgbXVhLmluZGV4T2YoJ01TSUUnKSkgPj0gMDsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdmctY29udGFpbmVyJykub25jb250ZXh0bWVudSA9IGZ1bmN0aW9uIChldmVudCkgew0KICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7DQp9DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3ZnLWNvbnRhaW5lcicpLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7DQogICAgaWYgKGV2ZW50LndoaWNoID09IDMpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7DQogICAgICAgIHRoaXMub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsNCiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQnkoLShldi5tb3ZlbWVudFgpLCAwKTsNCiAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAtKGV2Lm1vdmVtZW50WSkpDQogICAgICAgIH0NCiAgICAgICAgdGhpcy5vbm1vdXNldXAgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmN1cnNvciA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2V1cCA9IG51bGw7DQogICAgICAgICAgICB0aGlzLm9ubW91c2Vtb3ZlID0gbnVsbDsNCiAgICAgICAgfQ0KICAgIH0NCn0NCk51bWJlci5wcm90b3R5cGUudG9zdWl0c3ZnID0gZnVuY3Rpb24gKCkgew0KICAgIHZhciBudW0gPSB0aGlzLnZhbHVlT2YoKTsNCiAgICBpZiAobnVtICUgMSA9PT0gMCkgew0KICAgICAgICByZXR1cm4gbnVtICsgMC41DQogICAgfSBlbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzeiA9IGZ1bmN0aW9uICgpIHsNCiAgICB2YXIgbnVtID0gdGhpcy52YWx1ZU9mKCk7DQogICAgcmV0dXJuIG51bSA8IDEwID8gJzAnICsgbnVtIDogbnVtOw0KfTsNCmZ1bmN0aW9uIHBhcnNlRGF0ZShudW0pIHsNCiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKG51bSk7DQogICAgdmFyIFkgPSBkYXRlLmdldEZ1bGxZZWFyKCkgKyAnLSc7DQogICAgdmFyIE0gPSAoZGF0ZS5nZXRNb250aCgpICsgMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG1tICsgczsNCn0NCi8vLS1wcmVkZWZpbmVkDQovL2NvbW1lbnQtLQ0KDQpmdW5jdGlvbiBnZXRjd2gocG9wdXApIHsNCiAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgdmFyIHcgPSBwb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaCA9IHBvcHVwLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDsNCiAgICByZXR1cm4gW3csIGhdDQp9DQpzdmdFbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInN2ZyIpOw0KZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAvLyB2YXIgY29tbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzdmc6bnRoLWNoaWxkKCcgKyBpbmRleCArICcpIGc+Z1tlZFxcOmNvbW1lbnRdJyk7DQogICAgdmFyIGNvbW1lbnRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgc3ZnOm50aC1jaGlsZCgke2luZGV4fSkgZz5nW2VkXFw6Y29tbWVudF1gKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbW1lbnRzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgb2xpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsJywgJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgY29tbWVudHNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UoY29tbWVudHNbaV0uZ2V0QXR0cmlidXRlKCdlZDpjb21tZW50JykpOw0KICAgICAgICB2YXIgaGVpZ2h0ID0gMDsNCiAgICAgICAgdmFyIGNhcnIgPSBbXTsNCiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICB2YXIgc3RhbXAgPSBOdW1iZXIoYVtqXS5EYXRlKSAqIDEwMDA7DQogICAgICAgICAgICB2YXIgdGltZSA9IHBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgICAgICB2YXIgbmFtZSA9IGFbal0uTmFtZTsNCiAgICAgICAgICAgIHZhciBtZXNzYWdlID0gYVtqXS5NZXNzYWdlOw0KICAgICAgICAgICAgdmFyIG1lc3NhZ2VBcnIgPSBtZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICAgICAgdmFyIG8gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgICAgICB2YXIgdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIG0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCd4JywgNSk7DQogICAgICAgICAgICBuLnNldEF0dHJpYnV0ZSgneScsIDEyKTsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywgJyMwMDZlZmYnKTsNCiAgICAgICAgICAgIG4udGV4dENvbnRlbnQgPSBuYW1lICsgJzogJzsNCiAgICAgICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd4JywgMjAwKTsNCiAgICAgICAgICAgIHQuc2V0QXR0cmlidXRlKCd5JywgMTIpOw0KICAgICAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnIzk2OTY5NicpOw0KICAgICAgICAgICAgdC50ZXh0Q29udGVudCA9IHRpbWU7DQogICAgICAgICAgICB0LnNldEF0dHJpYnV0ZSgnZm9udC1zaXplJywgJzEwJyk7DQogICAgICAgICAgICBtLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgJ3RyYW5zbGF0ZSgyMCwyNyknKTsNCiAgICAgICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCAnMTInKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbWVzc2FnZUFyci5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgIHZhciB0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndHNwYW4nKTsNCiAgICAgICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgICAgIHRzLnNldEF0dHJpYnV0ZSgneScsIGsgKiAxNik7DQogICAgICAgICAgICAgICAgdHMudGV4dENvbnRlbnQgPSBtZXNzYWdlQXJyW2tdOw0KICAgICAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgby5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUoMCwnICsgaGVpZ2h0ICsgJyknKTsNCiAgICAgICAgICAgIG8uYXBwZW5kQ2hpbGQobik7DQogICAgICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICAgICAgby5hcHBlbmRDaGlsZChtKTsNCiAgICAgICAgICAgIGNhcnIucHVzaChvKTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICAgICAgaGVpZ2h0ID0gKG1lc3NhZ2VBcnIubGVuZ3RoICsgMSkgKiAxNiArIGhlaWdodDsNCiAgICAgICAgfQ0KICAgICAgICB2YXIgd2FyciA9IGdldGN3aChwb3B1cCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneCcsICcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgIHZhciBvdyA9IHdhcnJbMF0gKyAxMC41Ow0KICAgICAgICB2YXIgb2ggPSB3YXJyWzFdICsgMzsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsIG93KTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBvaCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjNjU2NTY1Jyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgdmFyIGwgPSBjYXJyLmxlbmd0aDsNCiAgICAgICAgd2hpbGUgKGwtLSkgew0KICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoY2FycltsXSk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBwb3B1cC5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICB9Ow0KICAgICAgICB2YXIgY3MgPSBjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcyA9IGNvbW1lbnRzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAndHInKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQocHBzWzFdKTsNCiAgICAgICAgICAgIHggPSB4LnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4ICsgJywnICsgeSArICcpJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ21hJykgew0KICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICB2YXIgbWFBcnIgPSBbcGFyc2VGbG9hdChwcHNbMV0pLCBwYXJzZUZsb2F0KHBwc1szXSksIHBhcnNlRmxvYXQocHBzWzVdKSwgcGFyc2VGbG9hdChwcHNbN10pLCBwYXJzZUZsb2F0KHBwc1s5XSksIHBhcnNlRmxvYXQocHBzWzExXSldOw0KICAgICAgICAgICAgaWYgKG1hQXJyWzFdID09IDApIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4MSA9IHgxLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgIHkxID0geTEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB2YXIgeDEgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICB5ID0gcGFyc2VGbG9hdChjc1sxXSk7DQogICAgICAgICAgICAgICAgdmFyIHgyID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgdmFyIGZ4ID0geDEgPCB4MiA/IHgxLnRvc3VpdHN2ZygpIDogeDIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIGZ5ID0geTEgPiB5MiA/IHkxLnRvc3VpdHN2ZygpIDogeTIudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyBmeCArICcsJyArIGZ5ICsgJyknOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIG9mZnkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd5JywgKC1vZmZ5KS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCdmaWxsJywgJ3RyYW5zcGFyZW50Jyk7DQogICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIHRyc3RyKTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdjb21tZW50JywgJycpOw0KICAgICAgICBwb3B1cC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsZXQgY29tbWVudGlkID0gY29tbWVudHNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgY29tbWVudHNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpjb21tZW50aWQnLCBjb21tZW50aWQpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdmVyID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBjb21tZW50c1tpXS5vbm1vdXNlb3V0ID0gZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy8gdmFyIGNvbW1lbnRpZCA9IHRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmNvbW1lbnRpZD0nIiArIGNvbW1lbnRpZCArICInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmICghdWEpIHsNCiAgICBmdW5jdGlvbiBnZXR3aChzLCBwKSB7DQogICAgICAgIHZhciBtYWlucCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KICAgICAgICBtYWlucC5zdHlsZS5jc3NUZXh0ID0gczsNCiAgICAgICAgbWFpbnAuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5zdHlsZS5tYXhXaWR0aCA9ICc0MDBweCc7DQogICAgICAgIG1haW5wLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICBtYWlucC5pbm5lckhUTUwgPSBwOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG1haW5wKTsNCiAgICAgICAgdmFyIHcgPSBtYWlucC5jbGllbnRXaWR0aDsNCiAgICAgICAgdmFyIGggPSBtYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csIGhdDQogICAgfQ0KICAgIHN2Z0VsZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnIik7DQogICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8PSBzdmdFbGVtcy5sZW5ndGg7IGluZGV4KyspIHsNCiAgICAgICAgdmFyIG5vdGVzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKSBnPmdbZWRcXDpub3RlXScpOw0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vdGVzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IG5vdGVzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6bm90ZScpOw0KICAgICAgICAgICAgdmFyIG5vdGVMb2NrID0gbm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlbG9jaycpOw0KICAgICAgICAgICAgaWYgKG5vdGVMb2NrID09ICd0cnVlJykgew0KICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgdmFyIG1haW5wID0gYS5tYXRjaCgvPGJvZHlbXj5dKj4oLiopPFwvYm9keT4vKVsxXTsNCiAgICAgICAgICAgIHZhciBtYWlucyA9IGEubWF0Y2goL3N0eWxlPSIoLio/KSIvKVsxXTsNCiAgICAgICAgICAgIHZhciBvdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2cnKTsNCiAgICAgICAgICAgIHZhciBvbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdmb3JlaWduT2JqZWN0Jyk7DQogICAgICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgaG92ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3JlY3QnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsICcjY2RjZGZmJyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywgJzAnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsICcwLjYnKTsNCiAgICAgICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywgbm90ZXNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgbm90ZXNbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dCA9IG1haW5zOw0KICAgICAgICAgICAgcG9wdXAuaW5uZXJIVE1MID0gbWFpbnA7DQogICAgICAgICAgICB2YXIgd2ggPSBnZXR3aChtYWlucywgbWFpbnApOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd3aWR0aCcsIHdoWzBdKTsNCiAgICAgICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgd2hbMV0pOw0KICAgICAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlKDgsNCknKTsNCiAgICAgICAgICAgIHBvcHVwLnN0eWxlLndvcmRCcmVhayA9ICdicmVhay1hbGwnOw0KICAgICAgICAgICAgcG9wdXAuc3R5bGUudGV4dEFsaWduID0gJ2xlZnQnOw0KICAgICAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd4JywgJzAnKTsNCiAgICAgICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsICcwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgd2hbMF0gKyAxNik7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsIHdoWzFdICsgOCk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjYTI3YTAwJyk7DQogICAgICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2ZmZTc5ZCcpOw0KICAgICAgICAgICAgb3V0LmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICAgICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdub3RlJywgJycpOw0KICAgICAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgICAgICBsZXQgbm90ZWlkID0gbm90ZXNbaV0ucGFyZW50Tm9kZS5wYXJlbnROb2RlLmlkICsgIiwiICsgbm90ZXNbaV0ucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ2VkOm5vdGVpZCcsIG5vdGVpZCk7DQogICAgICAgICAgICBvdXQub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIH07DQogICAgICAgICAgICBvdXQub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgd2luZG93LmdldFNlbGVjdGlvbiA/IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVSYW5nZSh3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmUpOmRvY3VtZW50LnNlbGVjdGlvbi5lbXB0eSgpOw0KDQogICAgICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHZhciBjcyA9IG5vdGVzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgICAgIHZhciBwcyA9IG5vdGVzW2ldLnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKTsNCiAgICAgICAgICAgIGlmIChwcy5zdWJzdHIoMCwgMikgPT0gJ3RyJykgew0KICAgICAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyBwYXJzZUZsb2F0KHBwc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KHBwc1sxXSk7DQogICAgICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeSA9IHkudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeCArICcsJyArIHkgKyAnKSc7DQogICAgICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICAgICAgdmFyIHBwcyA9IHBzLm1hdGNoKC8oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pW1wsIF0oXC0/XGQrKFwuXGQrKT8pXCkkLyk7DQogICAgICAgICAgICAgICAgdmFyIG1hQXJyID0gW3BhcnNlRmxvYXQocHBzWzFdKSwgcGFyc2VGbG9hdChwcHNbM10pLCBwYXJzZUZsb2F0KHBwc1s1XSksIHBhcnNlRmxvYXQocHBzWzddKSwgcGFyc2VGbG9hdChwcHNbOV0pLCBwYXJzZUZsb2F0KHBwc1sxMV0pXTsNCiAgICAgICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeSA9IHBhcnNlRmxvYXQoY3NbMV0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeTEgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICAgICAgeDEgPSB4MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgeDEgKyAnLCcgKyB5MSArICcpJzsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChjc1sxXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHgxID0geCAqIG1hQXJyWzBdICsgeSAqIG1hQXJyWzJdICsgbWFBcnJbNF07DQogICAgICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgICAgICB4ID0gcGFyc2VGbG9hdChjc1swXSkgKyAxNjsNCiAgICAgICAgICAgICAgICAgICAgeSA9IHBhcnNlRmxvYXQoY3NbMV0pOw0KICAgICAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHkyID0geCAqIG1hQXJyWzFdICsgeSAqIG1hQXJyWzNdICsgbWFBcnJbNV07DQogICAgICAgICAgICAgICAgICAgIHZhciBmeCA9IHgxIDwgeDIgPyB4MS50b3N1aXRzdmcoKSA6IHgyLnRvc3VpdHN2ZygpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIG9mZnkgPSBNYXRoLmFicyh5MSAtIHkyKTsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHRyc3RyID0gJ3RyYW5zbGF0ZSgnICsgZnggKyAnLCcgKyBmeSArICcpJzsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCAnMTYnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgneScsICgtb2ZmeSkudG9TdHJpbmcoKSk7DQogICAgICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQocG9wdXBSKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZzpudGgtY2hpbGQoJyArIGluZGV4ICsgJyknKS5hcHBlbmRDaGlsZChvdXQpOw0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgLy8gdmFyIG5vdGVpZCA9IG5vdGVpZDsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgICAgICB9Ow0KICAgICAgICAgICAgbm90ZXNbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAvLyB2YXIgbm90ZWlkID0gbm90ZWlkOw0KICAgICAgICAgICAgICAgIC8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bm90ZWlkPSciICsgbm90ZWlkICsgIiddW25vdGVdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0gZWxzZSB7DQogICAgY29uc29sZS5sb2coJ+aKseatie+8jElF5rWP6KeI5Zmo5LiN5pSv5oyBbm90Zeino+aekO+8jOivt+S9v+eUqOWFtuS7luWGheaguOa1j+iniOWZqOOAguiwouiwou+8gScpDQp9DQovLy0tbm90ZQ0KLy9oeXBlcmxpbmstLQ0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFyciwgYnJyKSB7DQogICAgdmFyIGwgPSAwOw0KICAgIHZhciBsbCA9IDA7DQogICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcnIubGVuZ3RoOyBqKyspIHsNCiAgICAgICAgdmFyIGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgaWYgKCFpc05hTihsaW5rYXJyW2pdKSkgew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudCA9ICdQYWdlLScgKyBhcnJbal07DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlLnRleHRDb250ZW50ID0gYXJyW2pdOw0KICAgICAgICB9DQogICAgICAgIGUuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICB2YXIgZXcgPSBlLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQgPSBicnJbal07DQogICAgICAgIGguc3R5bGUuZm9udFNpemUgPSAnMTJweCc7DQogICAgICAgIGguc3R5bGUuZm9udFdlaWdodCA9ICdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodyA9IGguZ2V0QkJveCgpLndpZHRoOw0KICAgICAgICBkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzdmcnKVswXS5yZW1vdmVDaGlsZChoKTsNCiAgICAgICAgbCA9IGV3ID4gaHcgPyBldyA6IGh3Ow0KICAgICAgICBsbCA9IGwgPiBsbCA/IGwgOiBsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0Kc3ZnRWxlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJzdmciKTsNCmZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPD0gc3ZnRWxlbXMubGVuZ3RoOyBpbmRleCsrKSB7DQogICAgbGV0IHN2Z0VsZW0gPSBzdmdFbGVtc1tpbmRleF07DQogICAgbGV0IGxpbmtzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic3ZnOm50aC1jaGlsZCgiICsgaW5kZXggKyAiKSBnPmdbZWRcXDpoeXBlcmxpbmtdIikNCiAgICBjb25zb2xlLmxvZyhsaW5rcyk7DQogICAgLy8gdmFyIGxpbmtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOmh5cGVybGlua10nKTsNCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxpbmtzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgIHZhciBwb3B1cCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAnZycpOw0KICAgICAgICB2YXIgcG9wdXBSID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgIHZhciBob3ZlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAncmVjdCcpOw0KICAgICAgICB2YXIgZGVzY2FyciA9IFtdOw0KICAgICAgICB2YXIgbGlua2FyciA9IFtdOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnI2NkY2RmZicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCAnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICcxNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywgJzAuNicpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsIGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykpOw0KICAgICAgICBob3Zlci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICBsaW5rc1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgICAgICB2YXIgYSA9IEpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgICAgIHZhciBjcyA9IGxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHBzID0gbGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpOw0KICAgICAgICBpZiAocHMuc3Vic3RyKDAsIDIpID09ICd0cicpIHsNCiAgICAgICAgICAgIHZhciBwcHMgPSBwcy5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgICAgICAgICAgdmFyIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIHBhcnNlRmxvYXQocHBzWzBdKTsNCiAgICAgICAgICAgIHZhciB5ID0gcGFyc2VGbG9hdChwcHNbMV0pOw0KICAgICAgICAgICAgeCA9IHgudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICB5ID0geS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIHggKyAnLCcgKyB5ICsgJyknOw0KICAgICAgICB9IGVsc2UgaWYgKHBzLnN1YnN0cigwLCAyKSA9PSAnbWEnKSB7DQogICAgICAgICAgICB2YXIgcHBzID0gcHMubWF0Y2goLyhcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylbXCwgXShcLT9cZCsoXC5cZCspPylcKSQvKTsNCiAgICAgICAgICAgIHZhciBtYUFyciA9IFtwYXJzZUZsb2F0KHBwc1sxXSksIHBhcnNlRmxvYXQocHBzWzNdKSwgcGFyc2VGbG9hdChwcHNbNV0pLCBwYXJzZUZsb2F0KHBwc1s3XSksIHBhcnNlRmxvYXQocHBzWzldKSwgcGFyc2VGbG9hdChwcHNbMTFdKV07DQogICAgICAgICAgICBpZiAobWFBcnJbMV0gPT0gMCkgew0KICAgICAgICAgICAgICAgIHZhciB4ID0gcGFyc2VGbG9hdChjc1swXSk7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHgxID0geDEudG9zdWl0c3ZnKCk7DQogICAgICAgICAgICAgICAgeTEgPSB5MS50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgdHJzdHIgPSAndHJhbnNsYXRlKCcgKyB4MSArICcsJyArIHkxICsgJyknOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB2YXIgeCA9IHBhcnNlRmxvYXQoY3NbMF0pICsgMTY7DQogICAgICAgICAgICAgICAgdmFyIHkgPSBwYXJzZUZsb2F0KGNzWzFdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHZhciB4MSA9IHggKiBtYUFyclswXSArIHkgKiBtYUFyclsyXSArIG1hQXJyWzRdOw0KICAgICAgICAgICAgICAgIHZhciB5MSA9IHggKiBtYUFyclsxXSArIHkgKiBtYUFyclszXSArIG1hQXJyWzVdOw0KICAgICAgICAgICAgICAgIHggPSBwYXJzZUZsb2F0KGNzWzBdKSArIDE2Ow0KICAgICAgICAgICAgICAgIHkgPSBwYXJzZUZsb2F0KGNzWzFdKTsNCiAgICAgICAgICAgICAgICB2YXIgeDIgPSB4ICogbWFBcnJbMF0gKyB5ICogbWFBcnJbMl0gKyBtYUFycls0XTsNCiAgICAgICAgICAgICAgICB2YXIgeTIgPSB4ICogbWFBcnJbMV0gKyB5ICogbWFBcnJbM10gKyBtYUFycls1XTsNCiAgICAgICAgICAgICAgICB2YXIgZnggPSB4MSA8IHgyID8geDEudG9zdWl0c3ZnKCkgOiB4Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgZnkgPSB5MSA+IHkyID8geTEudG9zdWl0c3ZnKCkgOiB5Mi50b3N1aXRzdmcoKTsNCiAgICAgICAgICAgICAgICB2YXIgb2ZmeSA9IE1hdGguYWJzKHkxIC0geTIpOw0KICAgICAgICAgICAgICAgIHZhciB0cnN0ciA9ICd0cmFuc2xhdGUoJyArIGZ4ICsgJywnICsgZnkgKyAnKSc7DQogICAgICAgICAgICAgICAgcG9wdXBSLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jywgb2ZmeS50b1N0cmluZygpKTsNCiAgICAgICAgICAgICAgICBwb3B1cFIuc2V0QXR0cmlidXRlKCd3aWR0aCcsICcxNicpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ3knLCAoLW9mZnkpLnRvU3RyaW5nKCkpOw0KICAgICAgICAgICAgICAgIHBvcHVwUi5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAndHJhbnNwYXJlbnQnKTsNCiAgICAgICAgICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChwb3B1cFIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIHZhciBhbCA9IGEubGVuZ3RoOw0KICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFsOyBqKyspIHsNCiAgICAgICAgICAgIGxpbmthcnIucHVzaChhW2pdLmxpbmspOw0KICAgICAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgICAgIH0NCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCB0cnN0cik7DQogICAgICAgIHZhciBtYXggPSBnZXRtYXhsZW4obGlua2FyciwgZGVzY2Fycik7DQogICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgYWw7IGsrKykgew0KICAgICAgICAgICAgdmFyIGMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ2EnKTsNCiAgICAgICAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdyZWN0Jyk7DQogICAgICAgICAgICB2YXIgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCAndGV4dCcpOw0KICAgICAgICAgICAgdmFyIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywgJ3RleHQnKTsNCiAgICAgICAgICAgIGlmIChpc05hTihsaW5rYXJyW2tdKSkgew0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInhsaW5rIiwgImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiwgImhyZWYiLCBsaW5rYXJyW2tdKTsNCiAgICAgICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywgJ19ibGFuaycpOw0KICAgICAgICAgICAgICAgIGUudGV4dENvbnRlbnQgPSBsaW5rYXJyW2tdOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBlLnRleHRDb250ZW50ID0gJ1BhZ2UtJyArIGxpbmthcnJba107DQogICAgICAgICAgICAgICAgYy5zZXRBdHRyaWJ1dGVOUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCAieGxpbmsiLCAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpOw0KICAgICAgICAgICAgICAgIGMuc2V0QXR0cmlidXRlTlMoImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCAiaHJlZiIsICIjIiArIGxpbmthcnJba10pOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgbWF4ICsgMTApOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsICczMycpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZScsICcjOTk5OTk5Jyk7DQogICAgICAgICAgICBkLnNldEF0dHJpYnV0ZSgnZmlsbCcsICd3aGl0ZScpOw0KICAgICAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLCAzMyAqIGspOw0KICAgICAgICAgICAgZi50ZXh0Q29udGVudCA9IGRlc2NhcnJba107DQogICAgICAgICAgICBmLnN0eWxlLmZvbnRTaXplID0gJzEycHgnOw0KICAgICAgICAgICAgZi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOw0KICAgICAgICAgICAgZi5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMTIpOw0KICAgICAgICAgICAgZS5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JzsNCiAgICAgICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywgMzMgKiBrICsgMjgpOw0KICAgICAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLCA1KTsNCiAgICAgICAgICAgIGMuYXBwZW5kQ2hpbGQoZCk7DQogICAgICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICAgICAgYy5hcHBlbmRDaGlsZChlKTsNCiAgICAgICAgICAgIGMub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZmlsbCA9ICcjZTFlMWZmJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIGMub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsID0gJ3doaXRlJw0KICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKGMpOw0KICAgICAgICB9DQogICAgICAgIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywgJycpOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ2VkOmxpbmtpZCcsIGxpbmtzW2ldLnBhcmVudE5vZGUucGFyZW50Tm9kZS5pZCArICIsIiArIGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBwb3B1cC5vbm1vdXNlb3ZlciA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHBvcHVwLm9ubW91c2VvdXQgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNzdmctY29udGFpbmVyID4gc3ZnOm50aC1jaGlsZCgnICsgaW5kZXggKyAnKScpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW92ZXIgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJzsNCiAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpsaW5raWQ9JyIgKyBsaW5raWQgKyAiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snOw0KICAgICAgICAgICAgLy8gcG9wdXAuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7DQogICAgICAgIH0NCiAgICAgICAgbGlua3NbaV0ub25tb3VzZW91dCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIC8vIHZhciBsaW5raWQgPSB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB2YXIgbGlua2lkID0gdGhpcy5wYXJlbnROb2RlLnBhcmVudE5vZGUuaWQgKyAiLCIgKyB0aGlzLnBhcmVudE5vZGUuaWQ7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIiArIGxpbmtpZCArICInXVtoeXBlcmxpbmtdIikuc3R5bGUuZGlzcGxheSA9ICdub25lJzsNCiAgICAgICAgICAgIC8vIHBvcHVwLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCi8vLS1oeXBlcmxpbmsNCi8vaW5pdGlhbGl6ZS0tDQp2YXIgc2hhcGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9ndG9waWNpZF0nKTsNCnZhciBtSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlID0ge307DQp2YXIgZXh0cmFSZWxhID0ge307DQp2YXIgY2hlY2tJRCA9ICcnOw0KZm9yICh2YXIgaSA9IDA7IGkgPCBtSWQubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgdHlwZSA9IG1JZFtpXS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBzaWQgPSBtSWRbaV0uaWQ7DQogICAgaWYgKHR5cGUgIT09ICdjYWxsb3V0Jykgew0KICAgICAgICBpbml0KHNpZCwgZGF0YVRyZWUpDQogICAgfQ0KfQ0KZnVuY3Rpb24gaW5pdChpZCwgb2JqKSB7DQogICAgdmFyIGNoaWxkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddOm5vdChbZWRcXDp0b3BpY3R5cGVdKSIpOw0KICAgIHZhciBjYWxscyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpwYXJlbnRpZD0nIiArIGlkICsgIiddW2VkXFw6dG9waWN0eXBlXSIpOw0KICAgIHZhciBzdW1tYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nc3VtbWFyeSddIik7DQogICAgdmFyIGJvdW5kYXJ5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDpmcm9taWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgdmFyIHJlbGF0byA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImdbZWRcXDp0b2lkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIG9ialsibSIgKyBpZF0gPSB7fTsNCiAgICB2YXIgdHlwZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvcGljdHlwZScpOw0KICAgIHZhciBpdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6aGVpZ2h0Jyk7DQogICAgaWYgKHR5cGUpIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS50eXBlID0gdHlwZTsNCiAgICB9DQogICAgaWYgKGl3ICYmIGloKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPSBpdzsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5oZWlnaHQgPSBpaDsNCiAgICB9DQogICAgaWYgKHJlbGFmcm9tLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYWZyb20ubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBpbmRleGlkID0gcmVsYWZyb21baV0uaWQ7DQogICAgICAgICAgICB2YXIgdG9pZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9pZCcpOw0KICAgICAgICAgICAgaWYgKGV4dHJhUmVsYVtpbmRleGlkXSA9PT0gdW5kZWZpbmVkKSB7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdID0gew0KICAgICAgICAgICAgICAgICAgICBpZDogaW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDogdG9pZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tW2luZGV4aWRdID0ge307DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGFmcm9tLmRpc3BsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAocmVsYXRvLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0byA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGF0by5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGluZGV4aWQgPSByZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5kZXhpZCkuZ2V0QXR0cmlidXRlKCdlZDpmcm9taWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogZnJvbWlkLA0KICAgICAgICAgICAgICAgICAgICB0b2lkOiBpZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOiBmYWxzZQ0KICAgICAgICAgICAgICAgIH07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnJlbGF0b1tpbmRleGlkXSA9IHt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5ICE9PSAnbm9uZScgPyAnYmxvY2snIDogJ25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgndXNlJylbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykuc2xpY2UoMSk7DQogICAgICAgICAgICBvYmpbIm0iICsgaWRdLnRvZ3R5cGUgPSB0b2c7DQogICAgICAgIH0NCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBjaGlsZHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jaGlsZCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGNhbGxzLmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmNhbGwgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNhbGxzW2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uY2FsbCk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCAhPT0gMCkgew0KICAgICAgICBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBib3VuZGFyeVtpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmJvdW5kYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoc3VtbWFyeS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5zdW1tYXJ5ID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IHN1bW1hcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5zdW1tYXJ5KTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCi8vLS1pbml0aWFsaXplDQovL3RvZ2dsZWRpc3BsYXktLQ0KdmFyIGNoYWluQXJyID0gW107DQpmdW5jdGlvbiBnZXRjaGFpbihpZCkgew0KICAgIGNoYWluQXJyLnVuc2hpZnQoJ20nICsgaWQpOw0KICAgIHZhciBwYXJlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmICghcGFyZW50KSB7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgaWYgKHBhcmVudC5tYXRjaCgvXCwvKSkgew0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQubWF0Y2goL1xkKyg/PVwsKS8pWzBdDQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFyciA9IFtdOw0KICAgIGdldGNoYWluKGlkKTsNCiAgICB2YXIgbWFpbiA9IGNoYWluQXJyWzBdOw0KICAgIGlmIChjaGFpbkFyci5sZW5ndGggPiAxKSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgLy8gY29uc29sZS5sb2coY2hhaW5BcnIpOw0KICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGNoYWluQXJyLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgYSA9IGNoYWluQXJyW2ldOw0KICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBPYmplY3Qua2V5cyhvYmopLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgdmFyIGNvYmogPSBvYmpbT2JqZWN0LmtleXMob2JqKVtqXV1bYV07DQogICAgICAgICAgICAgICAgaWYgKGNvYmopIHsNCiAgICAgICAgICAgICAgICAgICAgb2JqID0gY29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0gZWxzZSB7DQogICAgICAgIHZhciBvYmogPSBkYXRhVHJlZVttYWluXTsNCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH0NCg0KfQ0KZm9yICh2YXIgaSA9IDA7IGkgPCBzaGFwZS5sZW5ndGg7IGkrKykgew0KICAgIHNoYXBlW2ldLm9uY2xpY2sgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBpZCA9IE51bWJlcih0aGlzLmdldEF0dHJpYnV0ZSgnZWQ6dG9ndG9waWNpZCcpKTsNCiAgICAgICAgdmFyIG9iaiA9IGdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGUgPSBvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyA/ICdwbHVzJyA6ICdtaW51cyc7DQogICAgICAgIHZhciBkaXNwbGF5ID0gb2JqLnRvZ3R5cGUgPT09ICdtaW51cycgPyAnbm9uZScgOiAnYmxvY2snOw0KICAgICAgICB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKCd1c2UnKVswXS5zZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnLCAnIycgKyB0eXBlKTsNCiAgICAgICAgb2JqLnRvZ3R5cGUgPSB0eXBlOw0KICAgICAgICBjaGVja0lEID0gb2JqOw0KDQogICAgICAgIHV0ZChvYmosIGlkLCBkaXNwbGF5KTsNCiAgICAgICAgZXh0cmFSZWxhRmluKCk7DQogICAgfQ0KfQ0KZnVuY3Rpb24gdXRkKG9iaiwgaWQsIHNob3csIG9jKSB7DQoNCiAgICB2YXIgcHNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gJ2Jsb2NrJyA6ICdub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKSB7DQogICAgICAgIGlmIChvYmoucmVsYWZyb20uZGlzcGxheSAhPT0gcHNob3cpIHsNCiAgICAgICAgICAgIHZhciByZWxhZnJvbXMgPSBPYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBvYmoucmVsYWZyb20uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmoucmVsYXRvKSB7DQogICAgICAgIGlmIChvYmoucmVsYXRvLmRpc3BsYXkgIT09IHBzaG93KSB7DQogICAgICAgICAgICB2YXIgcmVsYXRvcyA9IE9iamVjdC5rZXlzKG9iai5yZWxhdG8pOw0KICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCByZWxhdG9zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0MgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqLnJlbGF0by5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5jYWxsKSB7DQogICAgICAgIHZhciBjYWxscyA9IE9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYgKGNoZWNrSUQgIT09IG9iaikgew0KICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjYWxscy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgICAgIHZhciBhID0gY2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouY2FsbFtjYWxsc1tpXV07DQogICAgICAgICAgICAgICAgdmFyIGMgPSBiLnRvZ3R5cGU7DQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20gJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLCAxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYWZyb21zLmxlbmd0aDsgaysrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoYi5yZWxhdG8uZGlzcGxheSAhPT0gc2hvdykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3MgPSBPYmplY3Qua2V5cyhiLnJlbGF0byk7DQogICAgICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGF0b3MubGVuZ3RoOyBrKyspIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IHJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYykgew0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKGMgPT09ICdtaW51cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsIHx8IGIuYm91bmRhcnkgfHwgYi5zdW1tYXJ5KSAmJiBjID09PSAncGx1cycpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93LCB0cnVlKQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmNhbGwgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnN1bW1hcnkgJiYgIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouc3VtbWFyeSkgew0KICAgICAgICB2YXIgc3VtbWFyeXMgPSBPYmplY3Qua2V5cyhvYmouc3VtbWFyeSk7DQogICAgICAgIGlmICgoY2hlY2tJRCAhPT0gb2JqICYmIChvYmoudG9ndHlwZSA9PT0gJ21pbnVzJyB8fCAhb2JqLnRvZ3R5cGUpKSB8fCBjaGVja0lEID09PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3VtbWFyeXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgICAgICB2YXIgYSA9IHN1bW1hcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBvc3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5nZXRBdHRyaWJ1dGUoJ2VkOnBhcmVudGlkJyk7DQogICAgICAgICAgICAgICAgaWYgKG9zcC5tYXRjaCgvXCwvKSkgew0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwYSA9IG9zcC5zcGxpdCgnLCcpOw0KICAgICAgICAgICAgICAgICAgICB2YXIgb3NwTCA9IDA7DQoNCiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBvc3BhLmxlbmd0aDsgaisrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdyA9PSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3NwYVtqXSkuc3R5bGUuZGlzcGxheSAhPSAnbm9uZScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3NwTCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgIT0gJ25vbmUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9zcEwrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAob3NwTCAhPT0gb3NwYS5sZW5ndGgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHZhciBiID0gb2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGMpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIithKyInXSIpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYoYz09PSdtaW51cycpew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICBpZiAoYi5jYWxsJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhiKS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChvYmouYm91bmRhcnkpIHsNCiAgICAgICAgdmFyIGJvdW5kYXJ5cyA9IE9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmIChjaGVja0lEICE9PSBvYmopIHsNCiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRhcnlzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICAgICAgdmFyIGEgPSBib3VuZGFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGIgPSBvYmouYm91bmRhcnlbYm91bmRhcnlzW2ldXTsNCiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhKTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3cpDQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIGlmKGIuY2FsbCYmIWMpIHsNCiAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYikubGVuZ3RoICE9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoIW9jICYmIG9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB2YXIgdFNQYXRoID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigicGF0aFtlZFxcOnRvc3VwZXJpZD0nIiArIGEgKyAiJ10iKTsNCiAgICAgICAgICAgIGlmICh0U1BhdGgpIHsNCiAgICAgICAgICAgICAgICB0U1BhdGguc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICB2YXIgbm90ZVRpcCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpub3RldG89JyIgKyBhICsgIiddIik7DQogICAgICAgICAgICBpZiAobm90ZVRpcCkgew0KICAgICAgICAgICAgICAgIG5vdGVUaXAuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGFmcm9tLmRpc3BsYXkgIT09IHNob3cpIHsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcyA9IE9iamVjdC5rZXlzKGIucmVsYWZyb20pOw0KICAgICAgICAgICAgICAgICAgICByZWxhZnJvbXMuc3BsaWNlKHJlbGFmcm9tcy5pbmRleE9mKCdkaXNwbGF5JyksIDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHJlbGFmcm9tcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhZnJvbXNba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byAmJiAhYykgew0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0by5kaXNwbGF5ICE9PSBzaG93KSB7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zID0gT2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwgMSk7DQogICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcmVsYXRvcy5sZW5ndGg7IGsrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSByZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFSZWxhW2RdLmlzQyA9IHRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdykNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKChiLmNhbGwgfHwgYi5ib3VuZGFyeSB8fCBiLnN1bW1hcnkpICYmIGMgPT09ICdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYiwgYSwgc2hvdywgdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5jYWxsICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3csIHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5ICYmICFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsIGEsIHNob3cpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSAmJiAhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLCBhLCBzaG93KQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBleHRyYVJlbGFGaW4oKSB7DQogICAgdmFyIGV4dHJha2V5cyA9IE9iamVjdC5rZXlzKGV4dHJhUmVsYSk7DQogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHRyYWtleXMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgdmFyIGV4dHJhT2JqID0gZXh0cmFSZWxhW2V4dHJha2V5c1tpXV07DQogICAgICAgIGlmIChleHRyYU9iai5pc0MgPT09IHRydWUpIHsNCiAgICAgICAgICAgIHZhciBmc2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmoudG9pZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnID8gdHJ1ZSA6IGZhbHNlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZXh0cmFPYmouaWQpLnN0eWxlLmRpc3BsYXkgPSBmc2hvdyAmJiB0c2hvdyA/ICdibG9jaycgOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
